package com.ruoyi.school.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.FileTypeEnum;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.school.domain.PacJobHonors;
import com.ruoyi.school.domain.Student;
import com.ruoyi.school.service.PacJobHonorsService;
import com.ruoyi.school.mapper.PacJobHonorsMapper;
import com.ruoyi.school.service.StudentService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import static com.ruoyi.common.utils.file.FileTypeUtils.getFileType;

/**
 * @author jeremylin
 * @description 针对表【pac_job_honors(在职荣誉)】的数据库操作Service实现
 * @createDate 2025-06-03 22:33:04
 */
@Service
public class PacJobHonorsServiceImpl extends ServiceImpl<PacJobHonorsMapper, PacJobHonors>
        implements PacJobHonorsService {

    @Resource
    private StudentService studentService;

    /**
     * 获取列表
     *
     * @param pacJobHonors
     * @return
     */
    @Override
    public List<PacJobHonors> getList(PacJobHonors pacJobHonors) {
        List<PacJobHonors> list = lambdaQuery()
                .eq(Objects.nonNull(pacJobHonors.getStuId()), PacJobHonors::getStuId, pacJobHonors.getStuId())
                .list();
        return list;
    }

    /**
     * 获取详情
     *
     * @param pacJobHonors
     * @return
     */
    @Override
    public PacJobHonors getDetails(PacJobHonors pacJobHonors) {
        if (pacJobHonors.getId() == null) {
            throw new BaseException("id不能为空");
        }
        PacJobHonors details = lambdaQuery()
                .eq(PacJobHonors::getId, pacJobHonors.getId())
                .one();
        return details;
    }

    /**
     * 添加
     *
     * @param pacJobHonors
     * @return
     */
    @Override
    public boolean add(PacJobHonors pacJobHonors) {
        if (pacJobHonors.getHonorTitle() == null) {
            throw new BaseException("荣誉名称不能为空");
        }
        if (pacJobHonors.getStuId() == null) {
            throw new BaseException("学生不能为空");
        }

        Student byId = studentService.getById(pacJobHonors.getStuId());
        if (byId != null) {
            pacJobHonors.setStuNum(byId.getStuNum());
            pacJobHonors.setStuName(byId.getStuName());
        }
        if(pacJobHonors.getHonorFile() != null){
            String fileType = getFileType(pacJobHonors.getHonorFile());
            FileTypeEnum fileTypeEnum = FileTypeEnum.fromExtension(fileType);
            pacJobHonors.setHonorFileType(fileTypeEnum.getCode());
        }
        if (save(pacJobHonors)) {
            return true;
        }
        return false;
    }

    /**
     * 更新
     *
     * @param pacJobHonors
     * @return
     */
    @Override
    public boolean edit(PacJobHonors pacJobHonors) {
        if (pacJobHonors.getId() == null) {
            throw new BaseException("id不能为空");
        }
        if (pacJobHonors.getHonorTitle() == null) {
            throw new BaseException("荣誉名称不能为空");
        }
        if (pacJobHonors.getStuId() == null) {
            throw new BaseException("学生不能为空");
        }
        Student byId = studentService.getById(pacJobHonors.getStuId());
        if (byId != null) {
            pacJobHonors.setStuNum(byId.getStuNum());
            pacJobHonors.setStuName(byId.getStuName());
        }

        if(pacJobHonors.getHonorFile() != null){
            String fileType = getFileType(pacJobHonors.getHonorFile());
            FileTypeEnum fileTypeEnum = FileTypeEnum.fromExtension(fileType);
            pacJobHonors.setHonorFileType(fileTypeEnum.getCode());
        }

        if (updateById(pacJobHonors)) {
            return true;
        }
        return false;
    }

    /**
     * 删除
     *
     * @param pacJobHonors
     * @return
     */
    @Override
    public boolean delete(PacJobHonors pacJobHonors) {
        if (pacJobHonors.getId() == null) {
            throw new BaseException("id不能为空");
        }
        if (removeById(pacJobHonors.getId())) {
            return true;
        }
        return false;
    }
}




